package com.skywolf.chem.match.job;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.skywolf.chem.match.common.enums.MatchApplyStatusEnum;
import com.skywolf.chem.match.common.enums.MatchStatusEnum;
import com.skywolf.chem.match.entity.Info;
import com.skywolf.chem.match.service.IMatchInfoService;
import com.skywolf.chem.match.utils.LocalDateUtils;
import lombok.AllArgsConstructor;
import org.checkerframework.checker.units.qual.A;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 * @Author sj
 * Date on 2021/9/27  10:22
 * @Version 1.0
 */
@Component
@AllArgsConstructor
public class MatchStatusJob {

    private final IMatchInfoService iMatchInfoService;

    /**
     * 更新赛事状态
     */
    @Async
    @Scheduled(cron = "*/10 * * * * ?")
    public void updateMatchStatus() throws ParseException {
        LambdaQueryWrapper<Info> wrapper = new LambdaQueryWrapper<>();
        wrapper.notIn(Info::getMatchStatus, MatchStatusEnum.AWAITING.getStatus(),
                MatchStatusEnum.NOT_PASS.getStatus(), MatchStatusEnum.FINISH.getStatus(),
                MatchStatusEnum.PAST.getStatus(), MatchStatusEnum.PASS.getStatus());
        List<Info> infos = iMatchInfoService.list(wrapper);
        if (null == infos || infos.size() == 0) {
            return;
        }
        for (Info item : infos) {
            //活动状态
            Integer matchStatus = item.getMatchStatus();
            //报名状态
            Integer applyStatus = item.getApplyStatus();
            //当活动状态为报名状态时  ---->>更新报名状态
            if (MatchStatusEnum.APPLY.getStatus().equals(matchStatus)) {
                //当前时间大于报名开始时间   ->>报名开始
                if (LocalDateUtils.compareDateTimeToNow(item.getApplyStartTime()) == 1) {
                    //当前时间大于报名开始时间&&当前时间小于报名结束时间
                    if (LocalDateUtils.compareDateTimeToNow(item.getApplyEndTime()) == -1) {
                        //变更报名状态     ->>报名进行中
                        applyStatus = MatchApplyStatusEnum.APPLYING.getStatus();
                    }
                } else {
                    //变更报名状态为        ->>未开始报名
                    applyStatus = MatchApplyStatusEnum.NOT_START_APPLY.getStatus();
                }
                //当前时间大于活动结束时间
                if (LocalDateUtils.compareDateTimeToNow(item.getApplyEndTime()) == 1) {
                    //变更报名状态为        ->>结束报名
                    applyStatus = MatchApplyStatusEnum.FINISH.getStatus();
                    //报名结束变更活动状态为      ->>活动未开始
                    matchStatus = MatchStatusEnum.NOT_START_APPLY.getStatus();
                }
            }
            //当活动状态为未开始状态||进行中状态时     ->>走活动状态更新流程
            if (MatchStatusEnum.NOT_START_APPLY.getStatus().equals(matchStatus)
                    || MatchStatusEnum.STARTING.getStatus().equals(matchStatus)) {
                //当前时间大于活动开始时间
                if (LocalDateUtils.compareDateTimeToNow(item.getMatchStartTime()) == 1) {
                    //当前时间小于活动结束时间
                    if (LocalDateUtils.compareDateTimeToNow(item.getMatchEndTime()) == -1) {
                        //变更活动状态为          ->>活动进行中
                        matchStatus = MatchStatusEnum.STARTING.getStatus();
                    }
                }
                //当前时间大于活动开始时间
                if (LocalDateUtils.compareDateTimeToNow(item.getMatchEndTime()) == 1) {
                    //变更活动状态为          ->>活动结束
                    matchStatus = MatchStatusEnum.FINISH.getStatus();
                }
            }
            LambdaUpdateWrapper<Info> updateWrapper=new LambdaUpdateWrapper<>();
            updateWrapper.set(Info::getMatchStatus,matchStatus);
            updateWrapper.set(Info::getApplyStatus,applyStatus);
            updateWrapper.eq(Info::getId,item.getId());
            iMatchInfoService.update(updateWrapper);
        }
    }
}
